iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
生成式 AI

iOS? AI-Yes!:用 Vide Coding 加速我的 Swift 學習曲線系列 第 18

Day 18 - 鑰匙與門戶:獲取你的第一個 AI API 金鑰並學會安全管理

  • 分享至 

  • xImage
  •  

歡迎來到第二章!在第一章中,我們已經從零到有,打造了一個功能完整、架構合理的鬧鐘 App。

在命令 AI 為我們寫東西、畫圖、甚至控制我們的 App 之前,我們必須先做一件最重要的事情,那就是向 AI 證明我們的身份。這就需要用到我們的API Key

  • 困惑點:什麼是 API Key?直接貼在程式碼裡安全嗎?當我準備連接 AI 服務時,我發現所有教學都提到需要一組「API Key」。要去哪裡申請? 我該如何存放它?

  • AI協作

    • 我的 Prompt:我準備要串接 AI 服務了,但我對 API Key 感到很困惑。請問什麼是 API Key,為什麼需要它,以及我可以在哪裡免費申請到一個?另外,直接把 Key 寫在 Swift 程式碼裡好像很危險,請問在 Xcode 專案中有沒有比較簡單又安全的存放方法?請簡單說明並不用給程式碼

    AI 的回答:

    您好,很高興能為您解答關於 API Key 的問題。這在資訊工程領域是個非常重要且基礎的概念。


    什麼是 API Key?

    API Key (應用程式介面金鑰) 就像是您使用某個網路服務的「身分證」或「通行證」。當您的應用程式要呼叫一個外部的 AI 服務 (例如:Google AI、OpenAI 等),這個 Key 就是用來驗證您的身分,讓服務提供商知道是誰在使用他們的服務。

    這個 Key 通常是一串獨特的字串,例如 sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx


    為什麼需要它?

    需要 API Key 的主要原因有三個:

    1. 身分驗證 (Authentication):確保只有授權的用戶或應用程式能存取服務。這能防止未經授權的存取和濫用。
    2. 存取控制 (Access Control):服務提供商可以根據您的 Key 來管理您可以使用的功能或資源。例如,某些 Key 可能只能讀取資料,而另一些則可以寫入。
    3. 使用量追蹤 (Usage Tracking):服務提供商能透過 Key 來追蹤您的使用量。這對於計費 (例如:按使用量收費) 和分析服務的效能都非常重要。

    如何免費申請 API Key?

    許多大型 AI 服務提供商都提供免費的 API Key 額度,讓開發者能夠先測試和開發。您可以到以下這些平台的官網註冊並申請:

    • Google AI Studio (Google):提供免費的 Gemini API Key。
    • OpenAI:提供部分免費的 API 額度。
    • Hugging Face:提供多種開源模型和服務,部分可免費使用。

    請注意:這些免費額度通常會有使用限制,例如每月請求次數或每分鐘請求頻率的上限。


    在 Xcode 中安全存放 API Key 的方法

    您觀察到直接將 API Key 寫在程式碼中是很危險的,這是非常正確的觀念。因為這樣做會將 Key 暴露在公開的程式碼中 (例如當您將專案上傳到 GitHub 時),可能被惡意人士盜用,導致您的帳號產生額外費用。

    在 Xcode 專案中,有幾種相對簡單又安全的存放方法,它們的核心思想都是將 Key 從程式碼中分離

    1. 使用 .xcconfig 檔案:這是一個 Xcode 的設定檔,您可以將 Key 定義在裡面,然後在專案的 Build Settings 中引用。這樣 Key 就不會直接出現在您的 Swift 程式碼裡。
    2. 使用環境變數 (Environment Variables):您可以在 Xcode 專案的 Scheme 設定中,為不同的環境 (例如:Debug 或 Release) 設定不同的環境變數,並將 Key 存在這些變數中。程式運行時可以透過 ProcessInfo.processInfo.environment 讀取這些值。
    3. 使用 Keychains:這是最安全的選擇之一。macOS 和 iOS 的 Keychains 是專門用來安全存放敏感資料的服務,例如密碼、憑證等。雖然操作上會比前兩者複雜一點,但它提供了作業系統等級的保護,即使應用程式被反編譯,Key 也難以被竊取。

    總結來說,我建議您可以先從 .xcconfig環境變數 開始,這兩者都相對容易實作,能有效防止 Key 被意外暴露。等到您的專案需要更高層級的安全保護時,再考慮使用 Keychains。

    • 根據 AI 的建議,我把詳細的實作步驟整理如下:
      1. 獲取 API 金鑰:從 Google AI Studio 網站上免費申請到我們的第一把 AI 「鑰匙」。
      2. 建立 API_KEY.plist 檔案:在 Xcode 中建立一個屬性列表檔案,專門用來存放我們的金鑰。
      3. 設定 .gitignore:告訴 Git 「不准碰」我們的金鑰檔案,這是最重要的一步。
      4. 在程式碼中安全讀取:展示如何在需要用到的地方(例如 Service 層),安全地從 .plist 檔案中讀取出金鑰。

步驟一:從 Google AI Studio 獲取 API 金鑰

首先,我們需要前往 Google AI Studio 網站來產生免費的開發金鑰。

  1. 打開瀏覽器,前往 aistudio.google.com

  2. 使用您的 Google 帳號登入。

  3. 登入後,點擊頁面左下角的 「Get API key」 按鈕。

    image

  4. 在彈出的視窗中,點擊 右上角「Create API key 」,並選擇Gemini API

    image

    image

  5. 畫面會顯示一組長長的亂碼,就是你的 API Key!點擊旁邊的複製按鈕,下一步會用到。

    image

步驟二:建立 API_KEY.plist 檔案

回到 Xcode 專案。

  1. 在專案的根目錄按右鍵,選擇 New File...

  2. 在篩選框中輸入 Property List,然後選擇 Property List 模板,點擊 Next

  3. 將檔案命名為 API_KEY.plist,並儲存。

  4. 打開這個新檔案,點擊「+」按鈕新增一個 Key,將其命名為 GeminiAPIKey(你可以自訂),Type 設為 String,並在 Value 欄位中貼上你剛剛複製的金鑰。

    image

步驟三:設定 .gitignore (極度重要!)

為了防止金鑰被上傳,我們必須告訴 Git 忽略這個檔案。

  1. 在專案的根目錄(最上層藍色圖示那層)找到 .gitignore 檔案(如果沒有,請手動建立一個純文字檔並命名為 .gitignore)。

  2. 打開它,在檔案的最後加上新的一行:

    # Secret Keys
    API_Keys.plist
    

步驟四:在程式碼中安全地讀取金鑰

這是最直接的一步。我們不需要任何複雜的設定,就可以在需要的地方(例如我們未來會建立的 Service 層)寫一個函式來讀取它。

這是一個讀取金鑰的範例函式

class GeminiAPIService {
    private let networkManager = NetworkManager.shared
    private let apiKey: String
    
    init() {
        // 從 API_KEY.plist 安全地讀取金鑰
        guard let path = Bundle.main.path(forResource: "API_KEY", ofType: "plist"),
              let dict = NSDictionary(contentsOfFile: path),
              let key = dict["GeminiAPIKey"] as? String else {
            fatalError("無法在 API_KEY.plist 中找到 GeminiAPIKey")
        }
        self.apiKey = key
    }
}

這個方法完成了從檔案讀取到驗證的所有工作,讓金鑰管理變得簡單又安全。

今日總結

今天我們沒有寫任何主要的功能,卻完成了至關重要的一步。

明天,我們會用 async/await 寫下第一行與 AI 對話的程式碼!


上一篇
Day 17 - 程式碼健檢:當 MVC 遇上瓶頸,用 MVVM 來拯救你的 ViewController
系列文
iOS? AI-Yes!:用 Vide Coding 加速我的 Swift 學習曲線18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言